import axios from 'axios';

class AjaxRequest{
    //写在实例上
    constructor(){
        this.baseURL = process.env.NODE_ENV ==='production' ? '/' : 'http://localhost:3300/api'
        this.timeout  = 3000
        
    }
    //原型上的“公共方法”
    
    //封装请求、响应拦截器
    setInterceptor(instance,url){
        instance.interceptors.request.use((config)=>{
            //保证每次请求的时候都能拿到token 
            config.headers.token = localStorage.getItem('token')||'';
            return config
        },err => Promise.reject(err))
        instance.interceptors.response.use((res)=>{
            // 请求到的数据会被拦截
            if(res.data.code==0){
                return res.data.data
            }else{
                return Promise.reject(res.data)
            }
            return res.data.data;
        },err => Promise.reject(err))
    }

    request(options){
        //  创建不重复的axios
        //  a.根据指定配置创建一个新的 axios，也就是每个新 axios都有自己的配置
        //  b.新 axios只是没有取消请求和批量发请求的方法，其它所有语法都是一政的
        let instance = axios.create();
        let config = {
            ...options,
            baseURL :this.baseURL,
            timeout :this.timeout,
        }
        this.setInterceptor(instance,options.url)
        return instance(config)
    }
}

export default new AjaxRequest;
// 使用：new AjaxRequest().request({
//     url:''
// })